package hcn.protocol.brandnew.zhenliao.zhiliao;

import com.fasterxml.jackson.annotation.JsonFormat;
import hcn.protocol.brandnew.BaseRequest;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * Created by ChenJij on 2023/9/4.
 */
@Data
public class QueryBloodRequisitionDetailResponse  extends BaseRequest {
    /**
     * 患者基本信息
     */
    private Patient patient;
    /**
     * 就诊摘要
     */
    private Visit visit;
    /**
     * 申请单
     */
    private TransfusionRequest transfusionRequest;
    /**
     * 申请血液品种
     */
    private List<TransComponents> transComponents;
    /**
     * 输血前检验结果
     */
    private List<TestResultBeforeTrans> testResultBeforeTrans;
    /**
     * 其他信息
     */
    private List<OtherInformations> otherInformations;
    /**
     * 审核信息列表
     */
    private List<ReviewProcessList> reviewProcessList;

    @Data
    public static class Patient{
        /**
         * 业务系统患者档案ID
         */
        private String sourcePatientId;
        /**
         * 业务系统患者档案类型
         */
        private String sourcePatientIdType;
        /**
         * 建档机构代码
         */
        private String authorOrganization;
        /**
         * 身份证件号码
         */
        private String idCard;
        /**
         * 身份证件类别代码
         */
        private String idCardCode;
        /**
         * 患者姓名
         */
        private String name;
        /**
         * 性别代码
         */
        private String sex;
        /**
         * 出生日期
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date birthDate;
        /**
         * 电话号码
         */
        private String patientPhone;
        /**
         * 医保卡号
         */
        private String healthInsuranceCardId;
        /**
         * 地址
         */
        private String address;
        /**
         * ABO血型代码
         */
        private String aboBloodCode;
        /**
         * Rh(D)血型代码
         */
        private String rhBloodCode;
    }

    @Data
    public static class Visit{
        /**
         * 就诊流水号
         */
        private String visitId;
        /**
         * 就诊机构代码
         */
        private String visitOrganization;
        /**
         * 患者类型代码
         */
        private String patientType;
        /**
         * 门（急）诊号
         */
        private String clinicId;
        /**
         * 住院号码
         */
        private String hospizationId;
        /**
         * 病床号
         */
        private String sickbedId;
        /**
         * 就诊时间日期
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date visitDateTime;
    }

    @Data
    public static class TransfusionRequest{
        /**
         * 检验申请单编号
         */
        private String requestId;
        /**
         * 婴儿判别 1婴儿 0成人
         */
        private String isNeonatus;
        /**
         * 申请单状态 0 已提交 1已完成 2已审核 3已退回
         * 具体看LIS那边的字典
         */
        private String requestStatus;
        /**
         * 年龄（岁）
         */
        private int age;
        /**
         * 科室代码
         */
        private String deptCode;
        /**
         * 科室名称
         */
        private String deptName;
        /**
         * 病区代码
         */
        private String wardAreaCode;
        /**
         * 病区名称
         */
        private String wardAreaName;
        /**
         * 执行科室代码
         */
        private String executiveDeptCode;
        /**
         * 病房号
         */
        private String sickRoomId;
        /**
         * 疾病诊断编码
         */
        private String diagnoseCode;
        /**
         * 疾病诊断名称
         */
        private String diagnoseName;
        /**
         * 紧急标志 1急诊 0平诊
         */
        private String isEmergency;
        /**
         * 申请时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date requestDateTime;
        /**
         * 申请医师代码
         */
        private String requestDoctor;
        /**
         * 申请医生姓名
         */
        private String requestDoctorName;
        /**
         * 申请科室代码
         */
        private String requestDept;
        /**
         * 申请科室名称
         */
        private String requestDeptName;
        /**
         * 申请方式
         */
        private String requestWay;
        /**
         * 预定输血日期时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date predictTransfusionDate;
        /**
         * 输血史标识代码 1有 0无
         */
        private String transfusionSign;
        /**
         * 输血史描述
         */
        private String transfusionHistory;
        /**
         * 输血性质代码 患者输血性质的类别代码1急诊用血 2择期备血 3治疗用血 4危急用血 5紧急用血
         */
        private String applyTransfusionProperties;
        /**
         * 申请ABO血型代码
         */
        private String applyABOBloodCode;
        /**
         * 申请Rh（D）血型代码
         */
        private String applyRhBloodCode;
        /**
         * 输血目的代码
         */
        private String transfusionObjective;
        /**
         * 输血方式代码
         */
        private String transfusionCode;
        /**
         * 输血方式名称
         */
        private String transfusionName;
        /**
         * 输血目的描述
         */
        private String transfusionObjectiveDesc;
        /**
         * 手术用血标志
         */
        private String operationMark;
        /**
         * 身高（cm）
         */
        private Double height;
        /**
         * 体重（kg）
         */
        private Double weight;
        /**
         * 舒张压（mmHg）
         */
        private Double diastolicPressure;
        /**
         * 收缩压（mmHg）
         */
        private Double systolicPressure;
        /**
         * 体温（℃）
         */
        private Double temperature;
        /**
         * 脉率（次/min）
         */
        private Double pulse;
        /**
         * 申请ABO血型代码
         */
        private String requestAboBloodCode;
        /**
         * 申请Rh(D)血型代码
         */
        private String requestRhBloodCode;
        /**
         * 采血标记
         */
        private String bloodCollectMark;
        /**
         * 输血地址
         */
        private String transfusionAddress;
        /**
         * 病人病史信息
         */
        private String diseasesHistory;
        /**
         * 输血反应史
         */
        private String transfusionReactHistory;
        /**
         * 过敏史
         */
        private String allergicHistory;
        /**
         * 移植史
         */
        private String transplantationHistory;
        /**
         * 其他重要病史
         */
        private String otherDiseasesHistory;
        /**
         * 孕次
         */
        private int pregnancyNumber;
        /**
         * 产次
         */
        private int deliveryNumber;
        /**
         * 医务部签名日期时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date approverSignDateTime;
    }

    @Data
    public static class TransComponents{
        /**
         * 输血品种代码
         */
        private String transfusionBreedCode;
        /**
         * 输血品种名称
         */
        private String transfusionBreedName;
        /**
         * 预输血成分代码
         */
        private String bloodComponentCode;
        /**
         * 预输血成分名称
         */
        private String bloodComponentName;
        /**
         * 输血量
         */
        private Double transfusionVolume;
        /**
         * 输血量计量单位
         */
        private String transfusionMeasurementUnit;
        /**
         * 备注
         */
        private String remarks;
    }

    @Data
    public static class TestResultBeforeTrans{
        /**
         * 检验项目代码
         */
        private String testId;
        /**
         * 检验项目名称
         */
        private String testName;
        /**
         * 检验项目英文简称
         */
        private String testEnglishName;
        /**
         * 检验结果
         */
        private String testResult;
        /**
         * 检验定量结果计量单位
         */
        private String resultUnit;
        /**
         * 报告时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date testDateTime;
        /**
         * 提示
         */
        private String remarks;
    }

    @Data
    public static class OtherInformations{
        /**
         * 其他信息名称
         */
        private String informationName;
        /**
         * 其他信息值
         */
        private String informationValue;
    }

    @Data
    public static class ReviewProcessList{
        /**
         * 审核医师代码
         */
        private String auditDoctorCode;
        /**
         * 审核医师姓名
         */
        private String auditDoctorName;
        /**
         * 审核状态 1发起申请 2待审核 3审核中
         */
        private String auditStatus;
        /**
         * 审核医生职务名称
         */
        private String professionalCategoryName;
        /**
         * 审核级别 例如 审核顺序 0 1 2 3
         * 0是发起申请
         * 1级的人审核完2级的人审核
         * 例如CurrentFlag当前处于1级，2级的人有两个人能审核，那么ReviewProcess>节点有两条2级的记录，
         * 已审核的ReviewProcess>节点只有一条1级的记录
         */
        private String auditLevel;
        /**
         * 审核结果 0未审核  1审核通过  2审核不通过
         */
        private String auditResult;
        /**
         * 审核日期时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh_CN", timezone = "GMT+8")
        private Date auditDateTime;
        /**
         * 当前状态标志 1当前流程所属状态状态    0非当前流程所属状态状态
         */
        private String currentFlag;
    }
}